package org.example.rabbitmq.helloworld;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Send {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.0.227");
        factory.setUsername("mq");
        factory.setPassword("123456");
        /** try-with-resources 是 Java 7 引入的一种自动资源管理语法结构，
         * 用于确保在 try 代码块执行结束后，自动关闭实现了 AutoCloseable 接口的资源对象，无需手动调用 close() 方法。
         * try (资源声明或初始化) {
         *     // 使用资源的代码
         * } catch (异常类型 异常变量) {
         *     // 异常处理
         * }
         * 资源必须是实现了 java.lang.AutoCloseable 接口（或其子接口 Closeable）的类。
         *
         * Connection 和 Channel 都实现了 AutoCloseable。
         * 在 try 块结束后，Java 会自动调用它们的 close() 方法，即使发生异常也会自动关闭。
         * 不需要再写 finally 块来手动关闭资源。
         *
         * try-with-resources 是现代 Java 编程中推荐的方式，用来安全、简洁地管理资源。
         * 在操作像 RabbitMQ 这样的外部资源时尤其重要，可以有效防止连接未关闭导致的资源泄露问题。
         * */
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "Hello World!";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}
